home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / lib / mathlib / libfft / fft.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  9.3 KB  |  213 lines

  1. #include <math.h>
  2. #include <sys/types.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5.  
  6. #ifndef _SGI_FFT_
  7. #define    _SGI_FFT_
  8.  
  9. #define        FACTOR_SPACE    15
  10.  
  11. /* *******************************************************
  12.     Complex structures definitions
  13. ******************************************************* */
  14.  
  15. typedef struct {
  16.     float re;
  17.     float im;
  18. } complex;
  19.  
  20. typedef struct {
  21.     double re;
  22.     double im;
  23. } zomplex;
  24.  
  25.  
  26. /* *******************************************************
  27.     C Functions prototypes
  28. ******************************************************* */
  29. /* *******************************************************
  30.     complex <---> complex FFTs
  31. ******************************************************* */
  32. complex *cfft1di( int n, complex *save);
  33. int cfft1d( int job, int n, complex *array, int inc, complex *save);
  34.  
  35. complex *cfft2di( int n1, int n2, complex *save);
  36. int cfft2d( int job, int n1, int n2, complex *array, int ld, complex *save);
  37.  
  38. complex *cfft3di( int n1, int n2, int n3, complex *save);
  39. int cfft3d( int job, int n1, int n2, int n3, complex *array, int ld1, int ld2, complex *save);
  40.  
  41.  
  42. /* *******************************************************
  43.     zomplex <---> zomplex FFTs
  44. ******************************************************* */
  45. zomplex *zfft1di( int n, zomplex *save);
  46. int zfft1d( int job, int n, zomplex *array, int inc, zomplex *save);
  47.  
  48. zomplex *zfft2di( int n1, int n2, zomplex *save);
  49. int zfft2d( int job, int n1, int n2, zomplex *array, int ld, zomplex *save);
  50.  
  51. zomplex *zfft3di( int n1, int n2, int n3, zomplex *save);
  52. int zfft3d( int job, int n1, int n2, int n3, zomplex *array, int ld1, int ld2, zomplex *save);
  53.  
  54.  
  55. /* *******************************************************
  56.     real <---> complex FFTs
  57. ******************************************************* */
  58. float *sfft1di( int n, float *save);
  59. #define sfft1dui    sfft1di
  60. int sfft1d( int job, int n, float *array, int inc, float *save);
  61. int sfft1du( int job, int n, float *array, int inc, float *save);
  62.  
  63. float *sfft2di( int n1, int n2, float *save);
  64. float *sfft2dui( int n1, int n2, float *save);
  65. int sfft2d( int job, int n1, int n2, float *array, int ld, float *save);
  66. int sfft2du( int job, int n1, int n2, float *array, int ld, float *save);
  67.  
  68. float *sfft3di( int n1, int n2, int n3, float *save);
  69. float *sfft3dui( int n1, int n2, int n3, float *save);
  70. int sfft3d( int job, int n1, int n2, int n3, float *array, int ld1, int ld2, float *save);
  71. int sfft3du( int job, int n1, int n2, int n3, float *array, int ld1, int ld2, float *save);
  72.  
  73.  
  74. /* *******************************************************
  75.     double <---> zomplex FFTs
  76. ******************************************************* */
  77. double *dfft1di( int n, double *save);
  78. #define dfft1dui    dfft1di
  79. int dfft1d( int job, int n, double *array, int inc, double *save);
  80. int dfft1du( int job, int n, double *array, int inc, double *save);
  81.  
  82. double *dfft2di( int n1, int n2, double *save);
  83. double *dfft2dui( int n1, int n2, double *save);
  84. int dfft2d( int job, int n1, int n2, double *array, int ld, double *save);
  85. int dfft2du( int job, int n1, int n2, double *array, int ld, double *save);
  86.  
  87. double *dfft3di( int n1, int n2, int n3, double *save);
  88. double *dfft3dui( int n1, int n2, int n3, double *save);
  89. int dfft3d( int job, int n1, int n2, int n3, double *array, int ld1, int ld2, double *save);
  90. int dfft3du( int job, int n1, int n2, int n3, double *array, int ld1, int ld2, double *save);
  91.  
  92.  
  93. /* *******************************************************
  94.     Fortran Subroutines prototypes
  95. ******************************************************* */
  96. /* *******************************************************
  97.     complex <---> complex FFTs
  98. ******************************************************* */
  99. void cfft1di_( int *n, complex *save);
  100. int cfft1d_( int *job, int *n, complex *array, int *inc, complex *save);
  101.  
  102. void cfft2di_( int *n1, int *n2, complex *save);
  103. void cfft2d_( int *job, int *n1, int *n2, complex *array, int *ld, complex *save);
  104.  
  105. void cfft3di_( int *n1, int *n2, int *n3, complex *save);
  106. void cfft3d_( int *job, int *n1, int *n2, int *n3, complex *array, int *ld1, int *ld2, complex *save);
  107.  
  108. /* ****************************
  109.     zomplex <---> zomplex FFTs
  110. **************************** */
  111. void zfft1di_( int *n, zomplex *save);
  112. void zfft1d_( int *job, int *n, zomplex *array, int *inc, zomplex *save);
  113.  
  114. void zfft2di_( int *n1, int *n2, zomplex *save);
  115. void zfft2d_( int *job, int *n1, int *n2, zomplex *array, int *ld, zomplex *save);
  116.  
  117. void zfft3di_( int *n1, int *n2, int *n3, zomplex *save);
  118. void zfft3d_( int *job, int *n1, int *n2, int *n3, zomplex *array, int *ld1, int *ld2, zomplex *save);
  119.  
  120. /* ********************************************************
  121.     real <---> complex FFTs
  122. ******************************************************** */
  123. void *sfft1di_( int *n, float *save);
  124. #define sfft1dui_ sfft1di_
  125. int *sfft1d_( int *job, int *n, float *array, int *inc, float *save);
  126. int *sfft1du_( int *job, int *n, float *array, int *inc, float *save);
  127.  
  128. void *sfft2di_( int *n1, int *n2, void *save);
  129. void *sfft2dui_( int *n1, int *n2, void *save);
  130. int *sfft2d_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  131. int *sfft2du_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  132.  
  133. void *sfft3di_( int *n1, int *n2, int *n3, void *save);
  134. void *sfft3dui_( int *n1, int *n2, int *n3, void *save);
  135. int *sfft3d_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  136. int *sfft3du_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  137.  
  138. /* ********************************************************
  139.     double <---> zomplex FFTs
  140. ******************************************************** */
  141. void *dfft1di_( int *n, double *save);
  142. #define dfft1dui_ dfft1di_
  143. int *dfft1d_( int *job, int *n, double *array, int *inc, double *save);
  144. int *dfft1du_( int *job, int *n, double *array, int *inc, double *save);
  145.  
  146. void *dfft2di_( int *n1, int *n2, void *save);
  147. void *dfft2dui_( int *n1, int *n2, void *save);
  148. int *dfft2d_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  149. int *dfft2du_( int *job, int *n1, int *n2, void *array, int *ld, void *save);
  150.  
  151. void *dfft3di_( int *n1, int *n2, int *n3, void *save);
  152. void *dfft3dui_( int *n1, int *n2, int *n3, void *save);
  153. int *dfft3d_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  154. int *dfft3du_( int *job, int *n1, int *n2, int *n3, void *array, int *ld1, int *ld2, void *save);
  155.  
  156. /************************************************************************
  157.     Product modules ... 
  158.         Performs convolution in 1 Domain by Product in the other
  159. ********************************************************************** */
  160.  
  161. void cprod1d( int n, complex *y, int incy, complex *filter, int incx);
  162. void zprod1d( int n, complex *y, int incy, complex *filter, int incx);
  163. void sprod1du( int n, complex *y, int incy, complex *filter, int incx);
  164. void dprod1du( int n, complex *y, int incy, complex *filter, int incx);
  165. void sprod1d( int n, complex *y, int incy, complex *filter, int incx);
  166. void dprod1d( int n, complex *y, int incy, complex *filter, int incx);
  167. void csprod1d( int n, complex *y, int iry, int incy, complex *filter, 
  168.         int irx, int incx);
  169. void zdprod1d( int n, complex *y, int iry, int incy, complex *filter, 
  170.         int irx, int incx);
  171.         
  172. void cprod2d( int n1, int n2, complex *y, int ldy, complex *filter, int ldx);
  173. void zprod2d( int n1, int n2, zomplex *y, int ldy, zomplex *filter, int ldx);
  174. void sprod2du( int n1, int n2, float *y, int ldy, float *filter, int ldx);
  175. void dprod2du( int n1, int n2, double *y, int ldy, double *filter, int ldx);
  176. void sprod2d( int n1, int n2, float *y, int ldy, float *filter, int ldx);
  177. void dprod2d( int n1, int n2, double *y, int ldy, double *filter, int ldx);
  178.  
  179. void cprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  180.         complex *filter, int ldx1, int ldx2);
  181. void zprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  182.         complex *filter, int ldx1, int ldx2);
  183. void sprod3du( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  184.         complex *filter, int ldx1, int ldx2);
  185. void dprod3du( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  186.         complex *filter, int ldx1, int ldx2);
  187. void sprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  188.         complex *filter, int ldx1, int ldx2);
  189. void dprod3d( int n1, int n2, int n3, complex *y, int ldy1, int ldy2, 
  190.         complex *filter, int ldx1, int ldx2);
  191. /************************************************************************
  192.     Scaling modules ... 
  193.         Scale the sequence by value APLHA ... 
  194.         to keep absolute values after Direct+Inverse transform.
  195. ********************************************************************** */
  196.  
  197. void cscal1d( int n, float alpha, complex *y, int inc);
  198. void zscal1d( int n, double alpha, zomplex *y, int inc);
  199. void sscal1d( int n, float alpha, float *y, int inc);
  200. void dscal1d( int n, double alpha, double *y, int inc);
  201.  
  202. void cscal2d( int nx, int ny, float alpha, complex *y, int ld);
  203. void zscal2d( int nx, int ny, double alpha, zomplex *y, int ld);
  204. void sscal2d( int nx, int ny, float alpha, float *y, int ld);
  205. void dscal2d( int nx, int ny, double alpha, double *y, int ld);
  206.  
  207. void cscal3d( int nx, int ny, int nz, float alpha, complex *y, int ld1,int ld2);
  208. void zscal3d( int nx, int ny, int nz, double alpha, zomplex *y,int ld1,int ld2);
  209. void sscal3d( int nx, int ny, int nz, float alpha, float *y, int ld1,int ld2);
  210. void dscal3d( int nx, int ny, int nz, double alpha, double *y, int ld1,int ld2);
  211.  
  212. #endif
  213.